作者有话说:我是个小白,这个是我的学习记录,以便以后回过头来看的时候能看懂;-),希望也可以帮助到大家🤗别杠杠就是你对哈哈哈哈哈哈
目录
打开 yolov5 的 github 官网,界面如下:
按右上角的 code,将代码下载下来
1. 首先将下载好的代码解压,使用 pycharm 打开
2. 进到 pycharm 页面后,点击右下角进行环境的选择(前面已经搭建好了)
3. 选择 show all
4. 选择之前搭建好的环境
5.yolov5 项目的结构
(1)data 文件夹里放着 yaml 的参数配置文件
(2)models 文件夹里放着
(3)weights 文件夹里放着训练好的权重参数
(4)train.py 文件是进行训练自己的数据集的函数
(5)detect.py 文件是利用训练好的权重参数进行目标检测
(6)test.py 文件是用来测试训练的结果的函数
(7)requirement.txt 文件
环境的安装是之前文章里已经安装好的,现在进行一些依赖的安装
1. 打开 requirement.txt 这个文件,里面包含很多依赖库和对应版本,打开 pycharm 的终端,复制下面这串代码,运行安装。
pip install -r requirements.txt
这里需要注意的是需要将这个文件里最下面那串代码删掉,具体原因我还没找到,好像是 pycocotools 没有提供 windows 的,因为我之前安装的时候报了错,所以这里我把它删掉。
终端如图所示
将代码复制运行,它就会开始安装包。
1. 这里训练自己的数据集,
2. 获得预训练权重
为了缩短我们训练时间,我们可以加载一些预训练权重来进行训练,yolov5 提供了几个预训练权重,可以根据不同的需求选择不同的版本区进行训练。本章选择训练自己的数据集,可以用预训练权重 yolov5s.pt。
打开 yolov5 提供的预训练权重进行下载,如图所示:
1. 首先将训练好的数据(VOCdevkit)先放进去,如图所示
2. 将刚下载好的预训练权重 yolov5s.pt 放到 weights 文件夹下,如图所示
3. 训练集和训练权重都有了
改相应的配置参数,就可以训练了~
1. 修改数据配置参数文件
(1)找到下图的文件,复制
(2)粘贴到 data 文件夹下,修改名称
(3)在 dog.yaml 文件里进行修改
这里需要注释掉下图框出的代码
(4)修改训练集和验证集的路径
复制训练集和验证集的路径
粘贴到代码,如图所示
(5)修改类的数量,我这里是 dog 和 cat 两类,所以填 2
(6)修改类的名称,我这里是 cat 和 dog
这个文件就改好啦
2. 修改 model 配置文件
(1)复制下图文件
(2)粘贴到 models 文件夹下
(3)在 dog.yaml 文件里修改
修改这里,改为 2(因为我这里是两个类),就改完了~
(1)找到训练的这个文件
(2)在 train.py 文件里修改
主要修改如下几个参数
第一个是权重的路径,复制权重路径,粘贴
第二个是模型的 yaml 文件,复制路径,粘贴
第三个是数据的 yaml 文件,复制路径,粘贴
修改好啦~
还可以修改训练的轮数
还可修改每次输入的图片张数
改完后,就可以运行这个. py 文件啦~ 它就开始训练了~
1. 错误一
我在网上找到,说是要去 Tags6 里面的 model/common.py 里面去找到这个 SPPF 的类, 把它拷过来到你这个 Tags5 的 model/common.py 里面, 这样你的代码就也有这个类了, 还要引入一个 warnings 包就行了!
这段代码如下:
import warnings
class SPPF(nn.Module):
# Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
super().__init__()
c_ = c1 // 2 # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c_ * 4, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
def forward(self, x):
x = self.cv1(x)
with warnings.catch_warnings():
warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning
y1 = self.m(x)
y2 = self.m(y1)
return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))复制到你们的 common.py 里面即可,记得把 import warnings 放在上面去!!
操作如图所示:
(1)打开 common.py 文件
(2)把上面那段代码复制粘贴
(3)最后重新回到 train.py 文件运行就行啦~
2. 错误二:
(1)打开这个文件
(2)81 行进行修改
(1)打开 pycharm 的控制端,复制下面这串代码,就可以看到训练的过程。(因为 yolov5 里有写好的 tensorbord 函数,可以直接调用)
tensorboard --logdir=runs/train
(2)打开这串网址
(3)训练好了还可以复制这串代码来查看这个模型的训练过程
tensorboard --logdir=runs
上面训练好之后,会出现一个 runs 文件夹, 里面有权重的文件夹,best 是最好的权重,last 是最后一次训练的权重。
它会自动做验证,参数之类的
接下来进行推理
(1)复制训练好的 best 权重
(2)粘贴到 weights 文件夹下
(3)打开 detect.py 做推理的这个文件
(4)将 best 权重的路径复制粘贴到下图中
(5)复制一张图片的路径到上图第二个框中
(6)加上这串展现推理结果
(6)运行后的结果保存在这里
(7)这里会出现一个问题就是运行结果没有框出值,这里降低置信度:将 detect.py 中的置信度值和 IOU 值都降低,再运行,就会有结果啦,但是可信度太低了!!!
某天,用了舍友的电脑跑了 12 轮.. 没记错的话,那个精确度就上来了些许~
阿!找到截图了
然后测试了一下
!!!!从 0.07——>0.71